﻿using System;
using System.Text;
using Sireass.Dal;
using System.Data.SqlClient;
using Csla.Data;

namespace Sireass.DalSql
{
    public class ProyectoCarreraDal : IProyectoCarreraDal
    {
        private SqlParameter accion = null;
        private string nombreProcedimiento = null;

        public ProyectoCarreraDal()
        {
            accion = new SqlParameter("@Accion", System.Data.SqlDbType.SmallInt);
            nombreProcedimiento = "spSireassCatProyectoCarrera";
        }
        
        public System.Data.IDataReader Fetch()
        {
            using (var ctx = ConnectionManager<SqlConnection>.GetManager("SqlServer"))
            {
                var cm = ctx.Connection.CreateCommand();
                cm.CommandType = System.Data.CommandType.StoredProcedure;
                cm.CommandText = nombreProcedimiento;
                cm.Parameters.AddWithValue("@Accion", AccionDal.AccionSP.CONSULTAR);
                return cm.ExecuteReader();
            }
        }

        public System.Data.IDataReader Fetch(long idProyectoCarrera)
        {
            using (var ctx = ConnectionManager<SqlConnection>.GetManager("SqlServer"))
            {
                var cm = ctx.Connection.CreateCommand();
                cm.CommandType = System.Data.CommandType.StoredProcedure;
                cm.CommandText = nombreProcedimiento;
                cm.Parameters.AddWithValue("@Accion", AccionDal.AccionSP.CONSULTAR);
                cm.Parameters.AddWithValue("@nId_Proyecto_Carrera", idProyectoCarrera);
                return cm.ExecuteReader();
            }
        }

        public long Insert(long idProyecto, long idCarrera, bool habilitado)
        {
            using (var ctx = ConnectionManager<SqlConnection>.GetManager("SqlServer"))
            {
                using (var cm = ctx.Connection.CreateCommand())
                {
                    cm.CommandType = System.Data.CommandType.StoredProcedure;
                    cm.CommandText = nombreProcedimiento;
                    cm.Parameters.AddWithValue("@Accion", AccionDal.AccionSP.INSERTAR);
                    cm.Parameters.AddWithValue("@nId_Proyecto", idProyecto);
                    cm.Parameters.AddWithValue("@nId_Carrera",  idCarrera);
                    cm.Parameters.AddWithValue("@bHabilitado", habilitado);

                    SqlParameter paramIdProyecto = new SqlParameter("@nId_Proyecto_Carrera", System.Data.SqlDbType.TinyInt);
                    paramIdProyecto.Direction = System.Data.ParameterDirection.Output;
                    cm.Parameters.Add(paramIdProyecto);
                    cm.ExecuteNonQuery();
                    return Convert.ToInt64(paramIdProyecto.Value);
                }
            }
        }

        public void Update(long idProyectoCarrera, long idProyecto, long idCarrera, bool habilitado, DateTime fechaAlta, DateTime fechaBaja)
        {
            using (var ctx = ConnectionManager<SqlConnection>.GetManager("SqlServer"))
            {
                using (var cm = ctx.Connection.CreateCommand())
                {
                    cm.CommandType = System.Data.CommandType.StoredProcedure;
                    cm.CommandText = nombreProcedimiento;
                    cm.Parameters.AddWithValue("@Accion", AccionDal.AccionSP.ACTUALIZAR);
                    cm.Parameters.AddWithValue("@nId_Proyecto_Carrera", idProyectoCarrera);
                    cm.Parameters.AddWithValue("@nId_Proyecto", idProyecto);
                    cm.Parameters.AddWithValue("@nId_Carrera", idCarrera);
                    cm.Parameters.AddWithValue("@bHabilitado", habilitado);
                    cm.Parameters.AddWithValue("@dFecha_Alta", fechaAlta);
                    cm.Parameters.AddWithValue("@dFecha_Baja", fechaBaja);

                    var rowsAffected = cm.ExecuteNonQuery();
                    if (rowsAffected == 0)
                        throw new DataNotFoundException("ProyectoCarreraUpdate");
                }
            }
        }

        public void Delete(long idProyectoCarrera)
        {
            using (var ctx = ConnectionManager<SqlConnection>.GetManager("SqlServer"))
            {
                using (var cm = ctx.Connection.CreateCommand())
                {
                    cm.CommandType = System.Data.CommandType.StoredProcedure;
                    cm.CommandText = nombreProcedimiento;
                    cm.Parameters.AddWithValue("@Accion", AccionDal.AccionSP.ELIMINAR);
                    cm.Parameters.AddWithValue("@nId_Proyecto_Carrera", idProyectoCarrera);
                    var rowsAffected = cm.ExecuteNonQuery();
                    if (rowsAffected == 0)
                        throw new DataNotFoundException("ProyectoEncargadoDelete");
                }
            }
        }
    }
}
